var MARK_TAB = '<span class="tab">[TAB]</span>';
var MARK_CR = '<span class="cr">↓</span>';

var RANGE_DEF = {
	'ne' : {'top':'<span id="[ID]" class="ne">', 'end': '</span>' },
	'np' : {'top':'<span id="[ID]" class="np">', 'end': '</span>' },
	'eq' : {'top':'<span id="[ID]" class="eq">', 'end': '</span>' }
};

var MARK_STYLES = {
	0:{
		'text_color':'',
		'back_color':'',
		'line_text_color':'',
		'line_back_color':''
	},
	1:{
//		'text_color':'#000000',
//		'back_color':'InfoBackground',
//		'line_text_color':'HighlightText',
//		'line_back_color':'Highlight'
		'text_color':'',
		'back_color':'InfoBackground',
		'line_text_color':'Highlight',
		'line_back_color':''
	},
	2:{
		'text_color':'HighlightText',
		'back_color':'Highlight',
		'line_text_color':'HighlightText',
		'line_back_color':'Highlight'
	}
};

//入力エリアのフォントのサイズ（cssから
var TEXTAREA_CHAR_HEIGHT = 18;	//css:line-height+2
var TEXTAREA_CHAR_WIDTH  = 7;	//css:font-size/2 + letter-spacing

String.prototype.trim = function()
{
	return this.replace(/^\s+|\s+$/g, '');
}
String.prototype.getByte = function()
{
	return escape(this).replace(/%u.{4}/g, "  ").replace(/%.{2}/g, " ").length;
}

String.prototype.swap = function(before, after)
{
	if(before==''){
		return this;
	}else{
		var ary = this.split(before);
		return ary.join(after);
	}
}
Array.prototype.sortByNumber = function()
{
	this.sort(
		function(a, b){
			return(parseInt(a) > parseInt(b)) ? 1 : -1;
		}
	);
}
String.prototype.getByte = function()
{
	return escape(this).replace(/%u.{4}/g, "  ").replace(/%.{2}/g, " ").length;
}
//function get_elements_by_classname(obj, class_name)
//{
//	var result = new Array();
//
//	with(obj){
//		for(var i=0 ; i<childNodes.length ; i++){
//			if(childNodes[i].className==class_name){
//				result[result.length] = childNodes[i];
//			}
//		}
//	}
//	return result;
//}

function form_init()
{
	var area_a = document.getElementById('A');
	var area_b = document.getElementById('B');
	if(area_a.value + area_b.value != ''){
		if(!confirm('編集中のテキストを消去します。よろしいですか？')){
			return;
		}
	}
	document.getElementById('main_form').reset();
}
function swap_text()
{
	var area_a = document.getElementById('A');
	var area_b = document.getElementById('B');
	if(area_a.value + area_b.value != ''){
		if(!confirm('比較元と比較対象のテキストを入れ替えます。よろしいですか？')){
			return;
		}
	}
	var str = area_b.value;
	area_b.value = '';
	copy_text();
	area_a.value = str;
}
function copy_text()
{
	var area_a = document.getElementById('A');
	var area_b = document.getElementById('B');
	if(area_b.value != ''){
		if(!confirm('比較対象のテキストに比較元のテキストをコピーします。よろしいですか？')){
			return;
		}
	}
	area_b.value = area_a.value;
}
function load_manual()
{
	var area_a = document.getElementById('A');
	var area_b = document.getElementById('B');

	if(area_a.value + area_b.value != ''){
		if(!confirm('編集中のテキストを消去して機能説明を読み込みます。よろしいですか？')){
			return;
		}
	}
	with(area_a){
		value = document.getElementById('manual_A').value
		scrollTop = 0;
	}
	with(area_b){
		value = document.getElementById('manual_B').value
		scrollTop = 0;
	}
}
function load_sample(n)
{
	if(confirm('入力エリアに過酷試験用の長文を読み込みます。インターネットエクスプローラの場合は8以上を推奨')){
		var area_a = document.getElementById('A');
		var area_b = document.getElementById('B');
		if(area_a.value + area_b.value != ''){
			if(!confirm('編集中のテキストを上書きしますが、よろしいですか？')){
				return;
			}
		}
		with(area_a){
			value = document.getElementById('sample_A').value
			scrollTop = 0;
		}
		with(area_b){
			value = document.getElementById('sample_B'+n).value
			scrollTop = 0;
		}
	}
}
function wdiff_init()
{
	with(document.getElementById('exec_load_manual')){
		innerHTML = '機能説明';
		title = '入力エリアに機能説明を表示します';
		style.width = '100px';
	}
	with(document.getElementById('exec_load_sample1')){
		innerHTML = 'ストレステスト１';
		title = '入力エリアに性能・動作試験用の長文を読み込みます';
		style.width = '120px';
	}
	with(document.getElementById('exec_load_sample2')){
		innerHTML = 'ストレステスト２';
		title = '入力エリアに性能・動作試験用の長文を読み込みます';
		style.width = '120px';
	}
	with(document.getElementById('exec_copy_text')){
		innerHTML = '⇒';
		title = '比較元のテキストを比較対象にコピーします';
		style.width = '30px';
	}
	with(document.getElementById('exec_swap_text')){
		innerHTML = '⇔';
		title = '比較元と比較対象のテキストを入れ替えます';
		style.width = '30px';
	}
	with(document.getElementById('exec_form_init')){
		innerHTML = '×';
		title = '入力エリアのテキストを消去します';
		style.width = '30px';
	}
	with(document.getElementById('exec_recall')){
		innerHTML = '▲';
		title = '入力エリアのテキストを現在の比較結果に戻します';
		style.width = '30px';
	}
	with(document.getElementById('exec_main')){
		innerHTML = '■';
		title = '実行!!';
		style.color = '#ff0000';
		style.width = '30px';
	}
	with(document.getElementById('exec_drop')){
		innerHTML = '●';
		title = 'ポイントした語句のマーキングを消去します';
		style.color = '#00ff00';
		style.width = '30px';
	}
	with(document.getElementById('exec_goto_top')){
		innerHTML = '△';
		title = '入力エリアにジャンプします';
		style.color = '#0000ff';
		style.width = '60px';
	}
	with(document.getElementById('exec_goto_bottom')){
		innerHTML = '▽';
		title = '比較結果にジャンプします';
		style.color = '#0000ff';
		style.width = '60px';
	}
}
